package com.yuncheng.oaApi.service.impl;


import org.apache.commons.collections.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuncheng.oaApi.entity.OaNkRsDjhgl;

import com.yuncheng.oaApi.mapper.OaNkRsDjhglMapper;

import com.yuncheng.oaApi.service.IOaNkRsDjhglService;

import com.yuncheng.oaApi.utils.GetUuIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

import com.yuncheng.common.base.service.impl.BaseServiceImpl;

import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * @Description: 内控-单据号管理
 * @Author: yuncheng
 * @Date: 2024-03-15
 * @Version: V1.0
 */
@Service
public class OaNkRsDjhglServiceImpl extends BaseServiceImpl<OaNkRsDjhglMapper, OaNkRsDjhgl> implements IOaNkRsDjhglService {

    @Resource
    @Lazy
    private OaNkRsDjhglMapper oaNkRsDjhglMapper;

    /**
     * 生成单据号，并且将单据号持久化到数据库进行管理
     * @return
     */
    @Override
    public String GetDocumentNumber(String id){
        LocalDate currentDate = LocalDate.now();
        String formattedDate = currentDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String djhqz =  "BX" + formattedDate;
        OaNkRsDjhgl oaNkRsDjhgl = new OaNkRsDjhgl();
        int fxh = 0;
        Integer fdjhhz = 1;
        //序号管理，查询当前最大的序号然后加1
        Integer i = oaNkRsDjhglMapper.selectMaxxh();
        if (i != null){
             fxh = i + 1;
            oaNkRsDjhgl.setFxh(fxh);
        }else {
            oaNkRsDjhgl.setFxh(fxh);
        }
        //单据号后缀管理 查询当天最大的后缀号
        Integer i1 = oaNkRsDjhglMapper.selectMaxdjhhz(djhqz);
            if(i1 != null){
            //如果不为空，再去比对最大的前缀是否跟今天初始化之后日期是否相同，如果相同，就加1，如果不相同，就从1开始
                List<OaNkRsDjhgl> oaNkRsDjhgls = oaNkRsDjhglMapper.selectList(new LambdaQueryWrapper<OaNkRsDjhgl>().eq(OaNkRsDjhgl::getFdjhhz, i1)
                        .eq(OaNkRsDjhgl::getFdjhqz,djhqz));
                if (CollectionUtils.isNotEmpty(oaNkRsDjhgls)){

                    boolean equals = oaNkRsDjhgls.get(0).getFdjhqz().equals(djhqz);
                    if (equals){
                        fdjhhz = i1 + 1;
                    }else{
                        fdjhhz = fdjhhz;
                    }

                }else {
                    fdjhhz = fdjhhz;
                }
            }else{
                fdjhhz = fdjhhz;
        }


        String strNum = String.valueOf(fdjhhz);
        int length = strNum.length();
       if(length == 1){
           oaNkRsDjhgl.setFdjh(djhqz + "-"+"00" + fdjhhz);
       }else if(length == 2){
           oaNkRsDjhgl.setFdjh(djhqz + "-" + "0" + fdjhhz);
       }


        oaNkRsDjhgl.setFxh(fxh);
        oaNkRsDjhgl.setId(GetUuIdUtils.ReplaceUuId());
        oaNkRsDjhgl.setFdjhqz(djhqz);
        oaNkRsDjhgl.setFdjhhz(fdjhhz);
        if (StringUtils.isNotBlank(id)){
            oaNkRsDjhgl.setFdjhbdid(id);
        }

        oaNkRsDjhglMapper.insert(oaNkRsDjhgl);
        return oaNkRsDjhgl.getFdjh();
    }


    /**
     * 生成单据号，并且将单据号持久化到数据库进行管理
     * @return
     */
    @Override
    public String JcyGetDocumentNumber(String id){
        LocalDate currentDate = LocalDate.now();
        String formattedDate = currentDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String djhqz =  "JCBX" + formattedDate;
        OaNkRsDjhgl oaNkRsDjhgl = new OaNkRsDjhgl();
        int fxh = 0;
        Integer fdjhhz = 1;
        //序号管理，查询当前最大的序号然后加1
        Integer i = oaNkRsDjhglMapper.selectMaxxh();
        if (i != null){
            fxh = i + 1;
            oaNkRsDjhgl.setFxh(fxh);
        }else {
            oaNkRsDjhgl.setFxh(fxh);
        }
        //单据号后缀管理 查询当天最大的后缀号
        Integer i1 = oaNkRsDjhglMapper.selectMaxdjhhz(djhqz);
        if(i1 != null){
            //如果不为空，再去比对最大的前缀是否跟今天初始化之后日期是否相同，如果相同，就加1，如果不相同，就从1开始
            List<OaNkRsDjhgl> oaNkRsDjhgls = oaNkRsDjhglMapper.selectList(new LambdaQueryWrapper<OaNkRsDjhgl>().eq(OaNkRsDjhgl::getFdjhhz, i1)
                    .eq(OaNkRsDjhgl::getFdjhqz,djhqz));
            if (CollectionUtils.isNotEmpty(oaNkRsDjhgls)){

                boolean equals = oaNkRsDjhgls.get(0).getFdjhqz().equals(djhqz);
                if (equals){
                    fdjhhz = i1 + 1;
                }else{
                    fdjhhz = fdjhhz;
                }

            }else {
                fdjhhz = fdjhhz;
            }
        }else{
            fdjhhz = fdjhhz;
        }


        String strNum = String.valueOf(fdjhhz);
        int length = strNum.length();
        if(length == 1){
            oaNkRsDjhgl.setFdjh(djhqz + "-"+"00" + fdjhhz);
        }else if(length == 2){
            oaNkRsDjhgl.setFdjh(djhqz + "-" + "0" + fdjhhz);
        }


        oaNkRsDjhgl.setFxh(fxh);
        oaNkRsDjhgl.setId(GetUuIdUtils.ReplaceUuId());
        oaNkRsDjhgl.setFdjhqz(djhqz);
        oaNkRsDjhgl.setFdjhhz(fdjhhz);
        if (StringUtils.isNotBlank(id)){
            oaNkRsDjhgl.setFdjhbdid(id);
        }

        oaNkRsDjhglMapper.insert(oaNkRsDjhgl);
        return oaNkRsDjhgl.getFdjh();
    }


}
